/*题目：(单例模式)
 小明去了一家大型商场，拿到了一个购物车，并开始购物。
 请你设计一个购物车管理器，记录商品添加到购物车的信息（商品名称和购买数量），并在购买结束后打印出商品清单。
（在整个购物过程中，小明只有一个购物车实例存在）
 输入：包含若干行，每行包含两部分信息，分别是商品名称和购买数量。商品名称和购买数量之间用空格隔开。
 输出：包含小明购物车中的所有商品及其购买数量。每行输出一种商品的信息，格式为 "商品名称 购买数量"
 例如：
    pen 1
    apple 2
 */

#include <iostream>
#include <map>
#include <string>
using namespace std;
class ShoppingCart{
private:
    ShoppingCart(){};
    map<string,int> cart;
public:
    //查看购物车
    void show() const{
        for (auto i = cart.begin(); i != cart.end(); ++i) {
            cout<<i->first<<" : "<<i->second<<endl;
        }
    }

    //添加商品到购物车
    void add(string& itemName,int num){
        cart[itemName]=cart[itemName]+num;
    }

    //获取购物车实例
    static ShoppingCart& getInstance(){
        static ShoppingCart instance;
        return instance;
    }
};
int main(){
    string itemName="";
    int num=0;

    while(cin>>itemName>>num){
        ShoppingCart& cart=ShoppingCart::getInstance();
        cart.add(itemName,num);
    }
    const ShoppingCart& cart=ShoppingCart::getInstance();
    cart.show();
    return 0;
}
